diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index a3c0703..bde9811 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->calendar =& new CI_Calendar();
+$obj->init_class('CI_Calendar');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 97aa4b7..74b233e 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -32,6 +32,8 @@
 	var $_ci_models			= array();
 	var $_ci_scaffolding	= FALSE;
 	var $_ci_scaff_table	= FALSE;
+	var $_ci_last_handle	= NULL;
+	var $_ci_last_params	= NULL;
 	
 	/**
 	 * Constructor
@@ -63,57 +65,117 @@
 		
 		log_message('debug', "Controller Class Initialized");
 	}
-  	// END Controller()
    	
 	// --------------------------------------------------------------------
 
 	/**
 	 * Initialization Handler
 	 *
-	 * Looks for the existence of a handler method and calls it
+	 * Designed to be called from the class files themselves.
+	 * See: http://www.codeigniter.com/user_guide/general/creating_libraries.html
+	 *
+	 * @access	public
+	 * @param 	string	class name
+	 * @param 	string	variable name
+	 * @param	mixed	any additional parameters
+	 * @return 	void
+	 */
+	function init_class($class, $varname = '', $params = NULL)
+	{
+		// First figure out what variable we're going to 
+		// use to instantiate the class to
+		if ($varname == '')
+		{
+			$varname = ( ! is_null($this->_ci_last_handle)) ? $this->_ci_last_handle : strtolower(str_replace('CI_', '', $class));
+		}
+		
+		// Are there any parameters?
+		if ($params === NULL AND $this->_ci_last_params !== NULL)
+		{
+			$params = $this->_ci_last_params;
+		}
+		
+		// Instantiate the class
+		if ( ! is_null($params))
+		{
+			$this->$varname = new $class($params);
+		}
+		else
+		{
+			$this->$varname = new $class;
+		}	
+		
+		$this->_ci_last_params = NULL;
+		$this->_ci_last_handle = NULL;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Initialization Handler
+	 *
+	 * This function loads the requested class.
 	 *
 	 * @access	private
 	 * @param 	string	the item that is being loaded
 	 * @param	mixed	any additional parameters
 	 * @return 	void
 	 */
-	function _ci_initialize($class, $params = FALSE)
-	{		
+	function _ci_init_class($class, $params = NULL)
+	{	
+		// Prep the class name
 		$class = strtolower(str_replace(EXT, '', $class));
-		$method = '_ci_init_'.$class;
-
-		if ( ! method_exists($this, $method))
-		{		
-			$class = ucfirst($class);
 		
-			if ( ! file_exists(APPPATH.'libraries/'.$class.EXT))
-			{
-				if ( ! file_exists(BASEPATH.'libraries/'.$class.EXT))
-				{
-					log_message('error', "Unable to load the requested class: ".$class);
-					show_error("Unable to load the class: ".$class);
-				}
-				
-				include_once(BASEPATH.'libraries/'.$class.EXT);
-			}
-			else
-			{
-				include_once(APPPATH.'libraries/'.$class.EXT);
-			}
-		}
-		else
-		{
-			if ($params === FALSE)
+		// These are used by $this->init_class() above.
+		// They lets us dynamically set the object name and pass parameters
+		$this->_ci_last_handle = $class;		
+		$this->_ci_last_params = $params;
+		
+		// Does THIS file (Controller.php) contain an initialization
+		// function that maps to the requested class?
+		
+		$method = '_ci_init_'.$class;
+		
+		if (method_exists($this, $method))
+		{		
+			if (is_null($params))
 			{
 				$this->$method();
 			}
 			else
 			{
 				$this->$method($params);
-			}
+			}		
+		
+			// We're done...
+			return TRUE;
 		}
+		
+		// Lets search for the requested library file and load it.
+		// We'll assume that the file we load contains a call to
+		// $obj->init_class() so that the class can get instantiated.
+		// For backward compatibility we'll test for filenames that are
+		// both uppercase and lower.
+		
+		foreach (array(ucfirst($class), $class) as $filename)
+		{
+			for ($i = 1; $i < 3; $i++)
+			{
+				$path = ($i % 2) ? APPPATH : BASEPATH;
+			
+				if (file_exists($path.'libraries/'.$filename.EXT))
+				{
+					include_once($path.'libraries/'.$filename.EXT);
+					return TRUE;	
+				}
+			}
+		
+		}
+		
+		// If we got this far we were unable to find the requested class
+		log_message('error', "Unable to load the requested class: ".$class);
+		show_error("Unable to load the class: ".$class);
 	}
-  	// END _ci_initialize()
   	
 	// --------------------------------------------------------------------
 
@@ -124,7 +186,7 @@
 	 * @param	string
 	 * @return	array
 	 */
-	function _ci_load_model($model, $name = '', $db_conn = FALSE)
+	function _ci_init_model($model, $name = '', $db_conn = FALSE)
 	{
 		if ($name == '')
 		{
@@ -168,9 +230,7 @@
 		$this->$name = new $model();
 		$this->_ci_models[] = $name;
 		$this->_ci_assign_to_models();
-	}
-	// END _ci_load_model()
-  	
+	}  	
 
 	// --------------------------------------------------------------------
 
@@ -195,9 +255,7 @@
 		{			
 			$obj->$model->_assign_libraries();			
 		}		
-	}
-	// END _ci_assign_to_models()
-  	
+	}  	
   	
 	// --------------------------------------------------------------------
 
@@ -245,13 +303,12 @@
 		
 		foreach ($autoload['libraries'] as $item)
 		{
-			$this->_ci_initialize($item);
+			$this->_ci_init_class($item);
 		}
 		unset($autoload['libraries']);
 
 		return $autoload;
 	}
-  	// END _ci_autoload()
   	
 	// --------------------------------------------------------------------
 
@@ -282,7 +339,6 @@
 			$this->load = new CI_Loader();
 		}
 	}
-  	// END _ci_assign_core()
   	
 	// --------------------------------------------------------------------
 
@@ -311,7 +367,6 @@
 		$this->_ci_scaffolding = TRUE;
 		$this->_ci_scaff_table = $table;
 	}
-  	// END _ci_init_scaffolding()
   	
 	// --------------------------------------------------------------------
 
@@ -324,7 +379,7 @@
 	 * @return	void
 	 */
 	function _ci_init_database($params = '', $return = FALSE, $active_record = FALSE)
-	{
+	{	
 		if ($this->_ci_is_loaded('db') == TRUE AND $return == FALSE AND $active_record == FALSE)
 		{
 			return;
@@ -394,7 +449,6 @@
 		$obj =& get_instance();
 		$obj->db =& $DB;
 	}
-  	// END _ci_init_database()
 
 	// --------------------------------------------------------------------
 
@@ -409,7 +463,6 @@
 	{
 		return ( ! isset($this->$class) OR ! is_object($this->$class)) ? FALSE : TRUE;
 	}
-  	// END _ci_is_loaded()
   	  	
 	// --------------------------------------------------------------------
 
@@ -440,13 +493,11 @@
 		}
 		
 		$this->_ci_init_database("", FALSE, TRUE);
-		
-		$this->_ci_initialize('pagination');
+		$this->_ci_init_class('pagination');
 		require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
 		$this->scaff = new Scaffolding($this->_ci_scaff_table);
 		$this->scaff->$method();
 	}
-	// END _ci_scaffolding()
 
 }
 // END _Controller class
diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index c153043..c9b9365 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->email =& new CI_Email();
+$obj->init_class('CI_Email');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Encrypt.php b/system/libraries/Encrypt.php
index 446f64a..6a3ca17 100644
--- a/system/libraries/Encrypt.php
+++ b/system/libraries/Encrypt.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->encrypt =& new CI_Encrypt();
+$obj->init_class('CI_Encrypt');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Image_lib.php b/system/libraries/Image_lib.php
index 86ed059..4962760 100644
--- a/system/libraries/Image_lib.php
+++ b/system/libraries/Image_lib.php
@@ -22,7 +22,7 @@
 }
 
 $obj =& get_instance();
-$obj->image_lib =& new CI_Image_lib($config);
+$obj->init_class('CI_Image_lib', '', $config);
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index 7449fa3..df067cb 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -66,13 +66,13 @@
 	 * @param	mixed	any initialization parameters
 	 * @return	void
 	 */	
-	function library($class, $param = FALSE)
+	function library($class, $param = NULL)
 	{		
 		if ($class == '')
 			return;
 	
 		$obj =& get_instance();
-		$obj->_ci_initialize($class, $param);
+		$obj->_ci_init_class($class, $param);
 		$obj->_ci_assign_to_models();
 	}
 	// END library()
@@ -95,7 +95,7 @@
 			return;
 	
 		$obj =& get_instance();
-		$obj->_ci_load_model($model, $name, $db_conn);
+		$obj->_ci_init_model($model, $name, $db_conn);
 	}
 	// END library()
 	
@@ -125,23 +125,6 @@
 		}
 	}
 	// END database()
-
-	// --------------------------------------------------------------------
-
-	/**
-	 * Database Utilities Loader
-	 *
-	 * @access	public
-	 * @param	string	the DB platform
-	 * @param	bool	whether to return the DB object
-	 * @return	object
-	 */	
-	function dbutil()
-	{
-		$obj =& get_instance();
-		return $obj->_ci_init_dbutil($db, $return);
-	}
-	// END dbutils()
 	
 	// --------------------------------------------------------------------
 	
diff --git a/system/libraries/Pagination.php b/system/libraries/Pagination.php
index d83a2bd..cd55d56 100644
--- a/system/libraries/Pagination.php
+++ b/system/libraries/Pagination.php
@@ -22,7 +22,7 @@
 }
 
 $obj =& get_instance();
-$obj->pagination =& new CI_Pagination($config);
+$obj->init_class('CI_Pagination', '', $config);
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Parser.php b/system/libraries/Parser.php
index 5bc2eb5..7618227 100644
--- a/system/libraries/Parser.php
+++ b/system/libraries/Parser.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->parser =& new CI_Parser();
+$obj->init_class('CI_Parser');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Session.php b/system/libraries/Session.php
index bcd2e4d..76acbfe 100644
--- a/system/libraries/Session.php
+++ b/system/libraries/Session.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->session =& new CI_Session();
+$obj->init_class('CI_Session');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Unit_test.php b/system/libraries/Unit_test.php
index 19fac79..04c3c19 100644
--- a/system/libraries/Unit_test.php
+++ b/system/libraries/Unit_test.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->unit =& new CI_Unit_test();
+$obj->init_class('CI_Unit_test');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Upload.php b/system/libraries/Upload.php
index 26f2165..3a6a6fc 100644
--- a/system/libraries/Upload.php
+++ b/system/libraries/Upload.php
@@ -22,7 +22,7 @@
 }
 
 $obj =& get_instance();
-$obj->upload = new CI_Upload($config);
+$obj->init_class('CI_Upload', '', $config);
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Validation.php b/system/libraries/Validation.php
index 6c755a9..34cacd5 100644
--- a/system/libraries/Validation.php
+++ b/system/libraries/Validation.php
@@ -16,7 +16,7 @@
 // INITIALIZE THE CLASS ---------------------------------------------------
 
 $obj =& get_instance();
-$obj->validation =& new CI_Validation();
+$obj->init_class('CI_Validation');
 
 // ------------------------------------------------------------------------
 
diff --git a/system/libraries/Xmlrpc.php b/system/libraries/Xmlrpc.php
index b470f72..24f79f2 100644
--- a/system/libraries/Xmlrpc.php
+++ b/system/libraries/Xmlrpc.php
@@ -5,7 +5,7 @@
  * An open source application development framework for PHP 4.3.2 or newer
  *
  * @package		CodeIgniter
- * @author		Rick Ellis
+ * @author		Rick Ellis, Paul Burdick
  * @copyright	Copyright (c) 2006, pMachine, Inc.
  * @license		http://www.codeignitor.com/user_guide/license.html 
  * @link		http://www.codeigniter.com
@@ -20,14 +20,8 @@
 
 // INITIALIZE THE CLASS ---------------------------------------------------
 
-$config = array();
-if (file_exists(APPPATH.'config/xmlrpc'.EXT))
-{
-	include_once(APPPATH.'config/xmlrpc'.EXT);
-}
-
 $obj =& get_instance();
-$obj->xmlrpc = new CI_XML_RPC($config);
+$obj->init_class('CI_Xmlrpc');
 
 // ------------------------------------------------------------------------
 
@@ -40,7 +34,7 @@
  * @author		Paul Burdick
  * @link		http://www.codeigniter.com/user_guide/libraries/xmlrpc.html
  */
-class CI_XML_RPC {
+class CI_Xmlrpc {
 
 	var $debug			= FALSE; 	// Debugging on or off	
 	var $xmlrpcI4		= 'i4'; 
@@ -78,7 +72,7 @@
     //  VALUES THAT MULTIPLE CLASSES NEED
     //-------------------------------------   
 
-	function CI_XML_RPC ($config = array()) 
+	function CI_Xmlrpc ($config = array()) 
 	{
 		
 		$this->xmlrpcName 		= $this->xmlrpcName;
@@ -351,7 +345,7 @@
  * @author		Paul Burdick
  * @link		http://www.codeigniter.com/user_guide/libraries/xmlrpc.html
  */
-class XML_RPC_Client extends CI_XML_RPC
+class XML_RPC_Client extends CI_Xmlrpc
 {
 	var $path			= '';
 	var $server			= '';
@@ -363,7 +357,7 @@
 
 	function XML_RPC_Client($path, $server, $port=80)
 	{
-		parent::CI_XML_RPC();
+		parent::CI_Xmlrpc();
 		
 		$this->port = $port; 
 		$this->server = $server; 
@@ -609,7 +603,7 @@
  * @author		Paul Burdick
  * @link		http://www.codeigniter.com/user_guide/libraries/xmlrpc.html
  */
-class XML_RPC_Message extends CI_XML_RPC
+class XML_RPC_Message extends CI_Xmlrpc
 {
 	var $payload;
 	var $method_name;
@@ -618,7 +612,7 @@
 
 	function XML_RPC_Message($method, $pars=0)
 	{
-		parent::CI_XML_RPC();
+		parent::CI_Xmlrpc();
 		
 		$this->method_name = $method;
 		if (is_array($pars) && sizeof($pars) > 0)
@@ -1206,14 +1200,14 @@
  * @author		Paul Burdick
  * @link		http://www.codeigniter.com/user_guide/libraries/xmlrpc.html
  */
-class XML_RPC_Values extends CI_XML_RPC
+class XML_RPC_Values extends CI_Xmlrpc
 {
 	var $me 	= array();
 	var $mytype	= 0;
 
 	function XML_RPC_Values($val=-1, $type='')
 	{	
-		parent::CI_XML_RPC();
+		parent::CI_Xmlrpc();
 		
 		if ($val != -1 || $type != '')
 		{
diff --git a/system/libraries/Xmlrpcs.php b/system/libraries/Xmlrpcs.php
index 4d50dfb..a95764a 100644
--- a/system/libraries/Xmlrpcs.php
+++ b/system/libraries/Xmlrpcs.php
@@ -5,7 +5,7 @@
  * An open source application development framework for PHP 4.3.2 or newer
  *
  * @package		CodeIgniter
- * @author		Rick Ellis
+ * @author		Rick Ellis, Paul Burdick
  * @copyright	Copyright (c) 2006, pMachine, Inc.
  * @license		http://www.codeignitor.com/user_guide/license.html 
  * @link		http://www.codeigniter.com
@@ -13,36 +13,18 @@
  * @filesource
  */
 
+if ( ! function_exists('xml_parser_create'))
+{	
+    show_error('Your PHP installation does not support XML');
+}
+
 
 // INITIALIZE THE CLASS ---------------------------------------------------
 
-$config = array();
-if (file_exists(APPPATH.'config/xmlrpcs'.EXT))
-{
-	include_once(APPPATH.'config/xmlrpcs'.EXT);
-}
+require_once(BASEPATH.'libraries/Xmlrpc'.EXT);		
 
-if ( ! class_exists('CI_XML_RPC'))
-{	
-	if ( ! file_exists(BASEPATH.'libraries/Xmlrpc'.EXT))
-	{
-		if ( ! file_exists(APPPATH.'libraries/Xmlrpc'.EXT))
-		{
-			show_error('Unable to locate the Xmlrpc class');
-		}
-		else
-		{
-			require_once(APPPATH.'libraries/Xmlrpc'.EXT);		
-		}
-	}
-	else
-	{
-		require_once(BASEPATH.'libraries/Xmlrpc'.EXT);		
-	}	
-}
-
-$obj =& get_instance();
-$obj->xmlrpcs = new CI_XML_RPC_Server($config);
+// The initialization code is at the bottom of this file.  It seems to
+// cause an error to have it at the top
 
 // ------------------------------------------------------------------------
 
@@ -55,7 +37,7 @@
  * @author		Paul Burdick
  * @link		http://www.codeigniter.com/user_guide/libraries/xmlrpc.html
  */
-class CI_XML_RPC_Server extends CI_XML_RPC
+class CI_Xmlrpcs extends CI_Xmlrpc
 {
 	var $methods		= array(); 	//array of methods mapped to function names and signatures
 	var $debug_msg		= '';		// Debug Message
@@ -67,9 +49,9 @@
 	//  Constructor, more or less
 	//-------------------------------------  
 
-	function CI_XML_RPC_Server($config=array())
+	function CI_Xmlrpcs($config=array())
 	{	
-		parent::CI_XML_RPC();
+		parent::CI_Xmlrpc();
 		$this->set_system_methods();
 	
 		if (isset($config['functions']) && is_array($config['functions']))
@@ -235,7 +217,7 @@
 				echo "</pre>";
 			}
 			
-			$r = $this->execute($m);
+			$r = $this->_execute($m);
 		}
 		
 		//-------------------------------------
@@ -508,7 +490,7 @@
 			$msg->params[] = $params->me['array'][$i];
 		}
 
-		$result = $this->execute($msg);
+		$result = $this->_execute($msg);
 
 		if ($result->faultCode() != 0)
 		{
@@ -520,4 +502,15 @@
 	
 }
 // END XML_RPC_Server class
+
+
+// INITIALIZE THE CLASS ---------------------------------------------------
+
+$obj =& get_instance();
+$obj->init_class('CI_Xmlrpc');
+$obj->init_class('CI_Xmlrpcs');
+
+// ------------------------------------------------------------------------
+
+
 ?>
\ No newline at end of file
